#include "player_controller.h"
#include "service_player.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <signal.h>
#include <fcntl.h>

#define MPLAYER_FIFO "/tmp/mplayer_fifo"

// 信号处理和发送命令
static void send_player_cmd(const char* cmd) {
    int fd = open(MPLAYER_FIFO, O_WRONLY | O_NONBLOCK);
    if (fd < 0) {
        
        return;
    }
    dprintf(fd, "%s\n", cmd);
    close(fd);
}

// 停止所有相关进程并清理文件
void player_stop()
{
    //退出MPlayer
    send_player_cmd("quit");
    usleep(50000); // 等待50毫秒

    // 强制清理MPlayer进程
    system("killall -9 mplayer > /dev/null 2>&1");
    
    //如果后台有下载任务，也强制停止它
    if (g_background_download_pid > 0) {
        kill(g_background_download_pid, SIGKILL);
        g_background_download_pid = -1; // 重置PID
    }

    //清理上一个视频的临时文件
    unlink(CURRENT_VIDEO_FILE);

    //清屏
    //system("dd if=/dev/zero of=/dev/fb0 bs=1M count=10 > /dev/null 2>&1");
}

// player_video函数播放本地文件
pid_t player_video(const char* local_video_path)
{
    char command_string[2048];
    
    
    //使用 -loop 0确保短视频不会自动重播
    snprintf(command_string, sizeof(command_string),
             "mplayer -slave -input file=%s -vo fbdev2:/dev/fb0 -vf scale=-2:600 -really-quiet -nolirc -loop 0 -framedrop %s",
             MPLAYER_FIFO, local_video_path);

    pid_t pid = fork();
    if (pid < 0) {
        perror("fork error for mplayer");
        return -1;
    }

    if (pid == 0) { // 子进程
        // 使用 sh -c 来执行，可以更好地处理参数
        execlp("sh", "sh", "-c", command_string, NULL);
        perror("execlp sh for mplayer failed");
        exit(1);
    }
    
    return pid; // 返回MPlayer的父进程(sh)的PID
}

void player_pause(void)
{
    send_player_cmd("pause");
}
